/// \file Torus.h
/// \date 2012-12-08
/// \brief class that models a torus and its behavior
#ifndef _TORUSPRORENDERING_APPMODEL_TORUS_H__
#define _TORUSPRORENDERING_APPMODEL_TORUS_H__

#include <Render/Include/Mesh.h>
#include <Render/Include/Texture.h>

namespace AppModel
{
/// \brief class that models a torus and its behavior
class Torus
{
public:
    // ========== LIFECYCLE ========== //
    /// \brief Constructor
    Torus(Render::Mesh* mesh, Render::Texture* texture);

    /// \brief Destructor
    virtual ~Torus(void);
    // ========== OVERLODED OPERATORS ========== //

    // ========== METHODS ========== //
    
    /// \brief progress its movement the time elapsed
    void progress(const float &time_step);    
    
    /// \brief changes the torus resources
    void changeResources(Render::Mesh* mesh, Render::Texture* texture);

    // ========== GETTERS ========== //

    /// \brief obtains the mesh
    Render::Mesh* getMesh() const;

    /// \brief obtains the texture
    Render::Texture* getTexture() const;
    
    /// \brief obtains the wave offset
    float getWaveOffset() const;

    // ========== SETTERS ========== //
    void setWaveVelocity(float velocity);
    
    // ========== INQUIRY ========== //
private:
    // ========== INTERNAL METHODS ========== //

    // ========== ATTRIBUTES ========== //
    
    /// \brief the torus mesh
    Render::Mesh* mesh;

    /// \brief the torus texture
    Render::Texture* texture;

    /// \brief the wave velocity
    float mesh_wave_velocity;
    
    /// \brief the wave offset
    float mesh_wave_offset;
};
};
#endif // _TORUSPRORENDERING_APPMODEL_TORUS_H__
